WITH Bulletin.Fonctionalites;
WITH Matiere.io;

PACKAGE BODY bulletin.io IS

   PROCEDURE Put(X : Bulletin) IS
    BEGIN
      Put(Ada.Text_IO.Current_Output,X);
   END Put;

   PROCEDURE Put(F : Ada.Text_IO.File_TYPE; X : Bulletin)IS
   BEGIN
      Ada.Text_IO.Put(F,"Note objectif : ");Valeur.put(F,X.Un_ObjectIF);
      Ada.Text_IO.New_Line(F);
       Ada.Text_IO.Put_Line(F,"Details des matieres - " & Natural'Image(X.Selon) & " matiere(s) : ");
      Ada.Text_IO.Put_Line(F,"------------------------------");
      Ada.Text_IO.New_Line(F);
      for i in 1..X.Des_Matieres'length LOOP
         Matiere.io.Put(F,X.Des_Matieres(i));
         Ada.Text_IO.New_Line;
      END LOOP;
      Ada.Text_IO.Put_Line("------------------------------");
      Ada.Text_IO.New_Line;
   END Put;

   PROCEDURE PutFichier(F : Ada.Text_IO.File_TYPE; X : Bulletin) IS
   BEGIN
      Ada.Text_IO.Put_line(F,Natural'Image(X.Un_ObjectIF));
      for i in 1..X.Des_Matieres'length LOOP
         Matiere.io.PutFichier(F => F,
                               X => X.Des_Matieres(I));
         END LOOP;
      END PutFichier;

   PROCEDURE Get (X : OUT Bulletin) IS
   BEGIN
      Get(Ada.Text_IO.Current_Output,X);
   END Get;

   PROCEDURE Get(F : Ada.Text_IO.File_TYPE ; X : OUT Bulletin) IS
      AUX : Bulletin;
   BEGIN
      Valeur.Get(AUX.Un_ObjectIF,"Entrez une note objectif de la forme xx,yy : ");
      LOOP
         Ada.Text_IO.Put_Line("Voulez-vous ajouter une matiere au bulletin [oui/non] ?");
         DECLARE
            choix : string := Ada.Text_IO.Get_Line;
         BEGIN
            IF choix = "oui" then
               AUX := Fonctionalites.Enregistrer(AUX, Matiere.CreerMatiere);
            elsif choix = "non" then
               exit;
            else
               Ada.Text_IO.Put_Line("Choix incorrect.");
            END IF;
         EXCEPTION
            WHEN OTHERS => Ada.Text_IO.Put_Line("Operation impossible");
         END;

      END LOOP;
      X := AUX;
   END Get;

   PROCEDURE GetFichier (F: Ada.Text_IO.File_TYPE ; X : OUT Bulletin) IS
      une_valeur : Valeur.valeur;
      un_bulletin : Bulletin;
   BEGIN
      une_valeur := Natural'Value(Ada.Text_IO.Get_Line(F));
      un_bulletin.Un_ObjectIF := une_valeur;
      while( not Ada.Text_IO.END_Of_File(F) ) LOOP
         DECLARE
            une_matiere : Matiere.Matiere;
         BEGIN
            Matiere.io.GetFichier(F,une_matiere);
            un_bulletin := Fonctionalites.Enregistrer(un_bulletin,une_matiere);
         END;
      END LOOP;
      X := un_bulletin;

      END GetFichier;






   --------------------------------

 PROCEDURE Get( monBulletin : access Bulletin) IS
   BEGIN

      Valeur.Get(monBulletin.all.Un_ObjectIF,"Entrez une note objectif de la forme xx,yy : ");

      LOOP
         Ada.Text_IO.Put_Line("Voulez-vous ajouter une matiere au bulletin [oui/non] ?");
         DECLARE
            choix : string := Ada.Text_IO.Get_Line;
            aux:Bulletin := monBulletin.all;
         BEGIN
            IF choix = "oui" then
               monBulletin.all := Fonctionalites.EnregIStrer(aux, Matiere.CreerMatiere);
            elsIF choix = "non" then
               exit;
            else
               Ada.Text_IO.Put_Line("choix incorrect");
            END IF;
         END;
      END LOOP;
   END Get;


END bulletin.io;
